{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Synthesizing a Gaussian Mixture Model (GMM) dataset\n",
    "### Dr. Tirthajyoti Sarkar, Fremont, CA 94536\n",
    "\n",
    "Gaussian mixture models are a probabilistic model for representing normally distributed subpopulations within an overall population. Mixture models in general don't require knowing which subpopulation a data point belongs to, allowing the model to learn the subpopulations automatically. Since subpopulation assignment is not known, this constitutes a form of unsupervised learning."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Libraries"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "import random\n",
    "import seaborn as sns"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### The generating function"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "def gen_GMM(N=1000,n_comp=3, mu=[-1,0,1],sigma=[1,1,1],mult=[1,1,1]):\n",
    "    \"\"\"\n",
    "    Generates a Gaussian mixture model data, from a given list of Gaussian components\n",
    "    N: Number of total samples (data points)\n",
    "    n_comp: Number of Gaussian components\n",
    "    mu: List of mean values of the Gaussian components\n",
    "    sigma: List of sigma (std. dev) values of the Gaussian components\n",
    "    mult: (Optional) list of multiplier for the Gaussian components\n",
    "    \"\"\"\n",
    "    assert n_comp == len(mu), \"The length of the list of mean values does not match number of Gaussian components\"\n",
    "    assert n_comp == len(sigma), \"The length of the list of sigma values does not match number of Gaussian components\"\n",
    "    assert n_comp == len(mult), \"The length of the list of multiplier values does not match number of Gaussian components\"\n",
    "    rand_samples = []\n",
    "    for i in range(N):\n",
    "        pivot = random.uniform(0,n_comp)\n",
    "        j = int(pivot)\n",
    "        rand_samples.append(mult[j]*random.gauss(mu[j],sigma[j]))\n",
    "        \n",
    "    return np.array(rand_samples)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Testing the function including `AssertionError`"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([-0.69350334,  0.36658481,  0.86296216,  0.46916309, -1.81498449,\n",
       "       -0.38003292,  2.1746676 ,  2.80926384,  0.86725979, -1.9510985 ])"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "gen_GMM(10)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "ename": "AssertionError",
     "evalue": "The length of the list of mean values does not match number of Gaussian components",
     "output_type": "error",
     "traceback": [
      "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[0;31mAssertionError\u001b[0m                            Traceback (most recent call last)",
      "\u001b[0;32m<ipython-input-4-812a110f17f3>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mgen_GMM\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mN\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m10\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0mn_comp\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m4\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0mmu\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;36m2\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0msigma\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;36m2\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m",
      "\u001b[0;32m<ipython-input-2-13828bf507a2>\u001b[0m in \u001b[0;36mgen_GMM\u001b[0;34m(N, n_comp, mu, sigma, mult)\u001b[0m\n\u001b[1;32m      8\u001b[0m     \u001b[0mmult\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0mOptional\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0mlist\u001b[0m \u001b[0mof\u001b[0m \u001b[0mmultiplier\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mthe\u001b[0m \u001b[0mGaussian\u001b[0m \u001b[0mcomponents\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m      9\u001b[0m     \"\"\"\n\u001b[0;32m---> 10\u001b[0;31m     \u001b[0;32massert\u001b[0m \u001b[0mn_comp\u001b[0m \u001b[0;34m==\u001b[0m \u001b[0mlen\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mmu\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m\"The length of the list of mean values does not match number of Gaussian components\"\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m     11\u001b[0m     \u001b[0;32massert\u001b[0m \u001b[0mn_comp\u001b[0m \u001b[0;34m==\u001b[0m \u001b[0mlen\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0msigma\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m\"The length of the list of sigma values does not match number of Gaussian components\"\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     12\u001b[0m     \u001b[0;32massert\u001b[0m \u001b[0mn_comp\u001b[0m \u001b[0;34m==\u001b[0m \u001b[0mlen\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mmult\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m\"The length of the list of multiplier values does not match number of Gaussian components\"\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;31mAssertionError\u001b[0m: The length of the list of mean values does not match number of Gaussian components"
     ]
    }
   ],
   "source": [
    "gen_GMM(N=10,n_comp=4,mu=[1,2,0],sigma=[1,1,1,2])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "ename": "AssertionError",
     "evalue": "The length of the list of sigma values does not match number of Gaussian components",
     "output_type": "error",
     "traceback": [
      "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[0;31mAssertionError\u001b[0m                            Traceback (most recent call last)",
      "\u001b[0;32m<ipython-input-5-f59c57e7c6fc>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mgen_GMM\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mN\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m10\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0mn_comp\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m4\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0mmu\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;36m2\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m-\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0msigma\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;36m2\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m",
      "\u001b[0;32m<ipython-input-2-13828bf507a2>\u001b[0m in \u001b[0;36mgen_GMM\u001b[0;34m(N, n_comp, mu, sigma, mult)\u001b[0m\n\u001b[1;32m      9\u001b[0m     \"\"\"\n\u001b[1;32m     10\u001b[0m     \u001b[0;32massert\u001b[0m \u001b[0mn_comp\u001b[0m \u001b[0;34m==\u001b[0m \u001b[0mlen\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mmu\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m\"The length of the list of mean values does not match number of Gaussian components\"\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 11\u001b[0;31m     \u001b[0;32massert\u001b[0m \u001b[0mn_comp\u001b[0m \u001b[0;34m==\u001b[0m \u001b[0mlen\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0msigma\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m\"The length of the list of sigma values does not match number of Gaussian components\"\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m     12\u001b[0m     \u001b[0;32massert\u001b[0m \u001b[0mn_comp\u001b[0m \u001b[0;34m==\u001b[0m \u001b[0mlen\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mmult\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m\"The length of the list of multiplier values does not match number of Gaussian components\"\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     13\u001b[0m     \u001b[0mrand_samples\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;31mAssertionError\u001b[0m: The length of the list of sigma values does not match number of Gaussian components"
     ]
    }
   ],
   "source": [
    "gen_GMM(N=10,n_comp=4,mu=[1,2,0,-1],sigma=[1,1,2])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Data and plot examples"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "data = gen_GMM(N=100,mu=[-6,0,6])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.scatter(x=np.arange(100),y=data,color='k')\n",
    "plt.grid(True)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [],
   "source": [
    "data = gen_GMM(N=10000,mu=[-6,0,6])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "sns.distplot(data,bins=50,hist_kws={'color':'blue','edgecolor':'k'},kde_kws={'lw':3,'color':'k'})\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [],
   "source": [
    "data = gen_GMM(N=10000,mu=[-3,0,3])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "sns.distplot(data,bins=50,hist_kws={'color':'blue','edgecolor':'k'},kde_kws={'lw':3,'color':'k'})\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [],
   "source": [
    "data = gen_GMM(N=10000,mu=[-5,0,5],sigma=[1,2,1.5])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXoAAAD4CAYAAADiry33AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8QZhcZAAAgAElEQVR4nO3deXyU1bnA8d+TDULYYhKQEEjYEQQRAlwErSJbrQYRVBRxKVf0orfXWhe8WBfcamurrcaFqlxriYqKFRUBAS2CCAQMSFhDIBASIOxJEEKSc/+YyZvJGMhAZuadmTzfzycfz3nXZxJ8cnLe854jxhiUUkqFrjC7A1BKKeVbmuiVUirEaaJXSqkQp4leKaVCnCZ6pZQKcRF2B+AuPj7epKSk2B2GUkoFlTVr1hwwxiTUti/gEn1KSgqZmZl2h6GUUkFFRPJOt8+jrhsRGSUiW0QkR0Sm1rL/MhFZKyLlIjKulv3NRSRfRF45u9CVUkrVV52JXkTCgXTgl0AP4CYR6eF22C7gdiDjNJd5Clh67mEqpZQ6V5606AcAOcaYXGNMGfA+MNr1AGPMTmPMeqDS/WQR6Qe0BhZ6IV6llFJnyZNE3xbY7VLPd26rk4iEAX8GHqjjuMkikikimUVFRZ5cWimllId8PbxyCjDPGJN/poOMMTOMManGmNSEhFofGiullDpHnoy62QO0c6knObd5YhBwqYhMAZoCUSJSYoz52QNdpZRSvuFJol8NdBGRDjgS/HjgZk8uboyZUFUWkduBVE3ySinlX3V23RhjyoF7gQXAJmC2MSZbRKaLSBqAiPQXkXzgeuANEcn2ZdBKKaU8J4E2H31qaqrRF6aUUursiMgaY0xqbfsC7s1Y5V3p6RkUFJTU2JaY2JR77vGo900pFQI00Ye4goISkpMn19iWlzfDpmiUUnbQ2SuVUirEaaJXSqkQp4leKaVCnCZ6pZQKcZrolVIqxOmomwYoMzOLadNqjrzRIZdKhS5N9A1QSUmlDrlUqgHRrhullApxmuiVUirEaaJXSqkQp4leKaVCnCZ6pZQKcZrolVIqxGmiV0qpEKeJXimlQpwmeqWUCnGa6JVSKsRpoldKqRCnc90oQCc6UyqUedSiF5FRIrJFRHJEZGot+y8TkbUiUi4i41y29xGRFSKSLSLrReRGbwavvKdqojPXL/dFxZVSwanORC8i4UA68EugB3CTiPRwO2wXcDuQ4bb9OHCrMaYnMAp4SURa1jdopZRSnvOk62YAkGOMyQUQkfeB0cDGqgOMMTud+ypdTzTGbHUpF4jIfiABOFLvyJVSSnnEk66btsBul3q+c9tZEZEBQBSwvZZ9k0UkU0Qyi4qKzvbSSimlzsAvo25EpA3wLnCHMabSfb8xZoYxJtUYk5qQkOCPkJRSqsHwJNHvAdq51JOc2zwiIs2BL4Bpxpjvzy48pZRS9eVJol8NdBGRDiISBYwH5npycefxnwD/MMZ8dO5hKqWUOld1JnpjTDlwL7AA2ATMNsZki8h0EUkDEJH+IpIPXA+8ISLZztNvAC4DbheRLOdXH598EqWUUrXy6IUpY8w8YJ7btsdcyqtxdOm4n/dP4J/1jFEppVQ96BQISikV4jTRK6VUiNNEr5RSIU4TfQNTUXGKvXs3smjRS+zZswFjjN0hKaV8TGevDCHp6Rk/m4gsM3MDycmOcmVlBW+9dQu5ud+Sm/stAPHxHZg48U1/h6qU8iNN9CGkoKCE5OTJNbZ9883dABhjeO+9e1izZnaN/QcO7OC118Zw4YVpfotTKeVf2nXTQMyb9wxLl75h1ZOTU2ncuBkAJ04cIzd3uV2hKaV8TBN9A1BScpB585626vHxnZk6dSVTplS/4Hzo0A7WrfvMjvCUUj6mib4B+O67mZSXnwSgXbs+dO58OWFhYXTrdjmXXHKHddx7791DWdlxu8JUSvmIJvoQZ4xh6dLXrfoVV/yGsLBwqz527J9o2jQegMOHd7NmzYd+j1Ep5Vua6EPckSP5FBU5lgBo0iSW/v1rrubYtGkcw4c/YNW///5dv8anlPI9TfQhbu/ebKs8aNDtREU1+dkxAwdOsMpbtizh8OF8v8SmlPIPTfQh7NCh3Rw+vMuq/+IXd9d6XGxsEi1aOBYNM8awcuUsv8SnlPIPTfQhLCvrX4Djzdfu3a+kdeuupz02IaGLVV658l19Y1apEKKJPoRt3LjQKvftO/aMx8bFdbC6dQoKstm9O8unsSml/EcTfYgqLy9j69avrXqPHiPOeHx4eBR9+oyx6itX6jICSoUKTfQhKjd3BSdPlgIQH9+RhIROdZ4zYMDNVjk7+0ufxaaU8i9N9CHKtdumrtZ8lW7dLiciIgqAwsJNHDt22CexKaX8SxN9iDqXRB8V1YTOnS+16jt3bvJ6XEop/9NEH4JKSg6wa9caZ03o1u0Kj8+94ILhVjk3d6OXI1NK2UETfQjatGmxNTyyWbNWNGnS0uNzXVv/O3duprKy0uvxKaX8y6P56EVkFPBXIBx40xjzB7f9lwEvAb2B8caYj1z23QY86qw+bYx5xxuBq9PbtKm626ZFi6SzOjcp6SKaNUuguLiI48eLufPOxzj//PbW/sTEptxzz81nuIJSKtDU2aIXkXAgHfgl0AO4SUR6uB22C7gdyHA79zzgcWAgMAB4XERi6x+2OpOcnOq55Vu2bHtW54aFhdG9+zCrfuRIc5KTJ1tf7itYKaUCnyddNwOAHGNMrjGmDHgfGO16gDFmpzFmPeD+d/5I4CtjzCFjzGHgK2CUF+JWp3H8+BH27dsCQFhYBDExCWd9DdfuG9eHukqp4ORJom8L7Hap5zu3eaI+56pzsHPnaquclNSb8PCzXy3S9YFsTs4yTp064ZXYlFL2CIiHsSIyWUQyRSSzqKjI7nCC2s6dq6xySsqAc7pGbGxba16c8vKT5OVleiU2pZQ9PEn0e4B2LvUk5zZPeHSuMWaGMSbVGJOakHD2XQ2qmmui79Bh4Dlfp1OnwVZ5+/bv6hWTUspeniT61UAXEekgIlHAeGBuHedUWQCMEJFY50PYEc5tygeMMezYsdKqn2uLHtwTvS4crlQwqzPRG2PKgXtxJOhNwGxjTLaITBeRNAAR6S8i+cD1wBsiku089xDwFI5fFquB6c5tygeOHTvMsWP7AGjcuBnnn9/tnK/VqdMlVnn79u902mKlgphHT+qMMfOAeW7bHnMpr8bRLVPbuW8Db9cjRuWhgoIdVjk5uX+NtWHPVuvW3YiIaER5+UlKSg6wf/+2M85nr5QKXAHxMFZ5h2ui79Dh3LttwDGevlmz1lZd++mVCl6a6ENIzUR/7g9iqzRrdr5V1n56pYKXJvoQUV5ezt691evD1udBbBVt0SsVGjTRh4gtW7Zw6lQZAC1bJtKyZWK9r9m0aQJhYY7HOIWFGykt1efoSgUjTfQhYt26dVa5Xbu+XrlmeHgk7dtfbNVzc7/3ynWVUv6liT5EuCb6pKTeXrtux47Vwyxzc1d47bpKKf85+4lQVEBav369VU5Kushr13V9qLtz52r69Gl3hqNVoElPz/jZjKM61XTDo4k+RPiqRZ+S0t8q5+WtxpgxXru28r2CghKSkyfX2JaXN8OmaJRdtOsmBBQVFVFYWAhAZGRjWrXq4rVrJyR0okkTxxICpaWHOHLkgNeurZTyD23RhwDXbpvExAvr9UasOxEhOTmVTZu+AqCwcKfXrq0Ch3bxhDZN9CHAV/3zVVJSBliJvqBgp9evr+ynXTyhTbtuQkDN/nlfJPrqfvrCwp1ev75Syrc00YcAXz2IreKa6Pfu3U1FRYXX76GU8h1N9EHu1KlTbNy40aq3bev9RO/6pu2pUyfZtGmT1++hlPIdTfRBbsuWLZSVOaY+aN48lpiYWJ/cJzm5ulW/atWqMxyplAo0muiDnOuD2Fatal0SwCtcJ0lbvXr1GY5USgUaTfRBzn+JvrpFr4leqeCiiT7IufbPJyTUf8bK00lOTrXK69ev58SJEz67l1LKuzTRBznXB6Px8W18dp+YmFhateoMOB4Au470UUoFNn1hKkilp2eQl3eI7du3O7cIO3ceZED91xs5rZSUAezfnwM4um8GDqz/KlbK/zIzs5g2bYbbtg0kJ9sUkPI5TfRBqqCghEaNLsUYA0BCQkd++qnSp/dMTu7PqlUZgPbTB5ujRwtZuvQNli9/m8OHd7NoUQTR0c3p23ccI0Y8SEnJWrtDVD6kiT6IFRZW98+3adPD5/fTB7LBx5hKPv3098yf/wcqK8ut7ZWV5ZSWHuLbb2ewbNmbJCR0oazsJ6Kiom2MVvmKR330IjJKRLaISI6ITK1lfyMR+cC5f6WIpDi3R4rIOyLyo4hsEpFHvBt+w7Z3b3X/vD8Sffv2FyPi+CezefNmjh075vN7qnNXXFzMRx+9xrx5T9dI8u6MqWT//i28/PJVnDhR7McIlb/U2aIXkXAgHRgO5AOrRWSuMWajy2GTgMPGmM4iMh54HrgRuB5oZIzpJSJNgI0i8p4xZqe3P0hDVLNFfwHFxb5dASoqqgkJCYns35+PMYY1a9ZwxRVX+PSeynOuM1AeP17CrFl/oahoj7U/JWUAw4bdz4YNi5g4MZ3t25czf/4f2LhxIQBbt37DX/4ylN/8Zj5Nm8bZ8hmUb3jSoh8A5Bhjco0xZcD7wGi3Y0YD7zjLHwFXiogABogRkQggGigDtBnoJf7uugFITEyxytp9E1iqZqBMTLyNL774tEaSHzHiQR5++Dv697+RsLBwIiKi6NbtCv7nfxZw3XXPW8fl5WXy5ps3UVnp2+c9yr88SfRtgd0u9XzntlqPMcaUA0eBOBxJvxQoBHYBLxhjDrnfQEQmi0imiGQWFRWd9YdoiCoqKti3b5tVP//87n65b5s21UMzNNEHHmMMs2bdxbZtS61tt976NmPH/vG06xSMHPkQnTpdhqNtBps2fcXixS/6JV7lH74eRz8AqAASgQ7A70Sko/tBxpgZxphUY0xqQkKCj0MKDYcP77f6Xc87rz2NGzfzy33btEmxyjrnTeBZtOhFVqx4x6q3bz+QwYPvqPO81q0vYOTIh636J588wt69u3wSo/I/TxL9HsB1Regk57Zaj3F207QADgI3A/ONMaeMMfuB5UAqqt4OHCi0yueff4Hf7rtrVxEREZHO8i7uu+8F0tMz/HZ/dXr79+/hX/+qHu8wePCvadvW8/UJ0tKmWyOrKipO8emnb1kT5qng5kmiXw10EZEOIhIFjAfmuh0zF7jNWR4HLDGOAd67gKEAIhID/Aew2RuBN3Suid5f/fMAx48L7dtX/66uqLjgZ0vQKf8rKyvjs89mUl7uSMzt2/fj5ptfs7pjPBEeHsmkSRk0atQUgIMH93L11bcybdoM60t/qQenOhO9s8/9XmABsAmYbYzJFpHpIpLmPOwtIE5EcoD7gaohmOlAUxHJxvELY6YxZj2q3lwTfWKi/xI91BxPv3On9tMHgqeffpp9+xyP0iIiGnHHHf8gIiLqrK/TqlVnrrnmCau+YsViWrW6keTkySQnT9Zf6kHKoz56Y8w8Y0xXY0wnY8wzzm2PGWPmOssnjDHXG2M6G2MGGGNyndtLnNt7GmN6GGP+5LuP0rDY1aKHmnPT79yp/fR227x5M88++6xVv/baZ+v1y//yy+8lLi4FgJKSA8yf//yZT1ABTyc1C0IVFRUcPLjXqvuzjx5+3qKvmoZB2ePBBx+0lnfs1GkwV155X72uFxnZiGuvfcaqL178IocO7T7DGSrQaaIPQjt27KCiwjHipnnz8322qtTptGrVhcaNmwOOFt/Rowf9en9VbdGiRXz++efOmjB+/MuEhdX/f+vU1PHExMQDcOrUCb766oV6X1PZRxN9EHKdg97f3TYAYWFhNVr1hYV5fo9BOf6y+93vfmfVe/ceRPv2F3vl2mFhYbRvX/0zXr78LUpLD3vl2sr/NNEHIdc56O1I9FCz+6agYIctMTRk6ekZpKXdYa0wFhkZRcuW3bx6j5Yt25GYeCEAJ0+W8u23M+o4QwUqTfRBqGaL3r/981VcH8hqi97/duw4wLJlC636qFHTKC8/+1E2ZyIiDB9e/RfD11//zeoyVMFFE30QsrvrBmq26PfuzbMeBir/WLFiPseO7QOgZcu2NRKyN/XvfxPNm58PwJEjBWzcqMNpg5Em+iBTWVkZEF03sbFJVgIoKzvJli1bbImjIdq1axerVi2y6mPGPEejRjE+uVdkZCOGDv2NVV+1arFP7qN8SxceCTL5+fmUlpYCEBMTR7Nm9swNJCKkpPRn/frPAMe8Nz162PNLp6F55JFHKC8/BTjegB0wYIJP73fZZXfxxRfTOXXqBPv27WbSpEc5//z21v7ExKbcc8/NPo1B1Y+26IOMe//82bzi7m2u3Tc6wZl/rFy5koyM6mkIrr/+L14ZTnkmMTHn0a/f9VZ9+/ZD1puy+rZscNBEH2QCoX++SocO1YuDr1jh20VPlGMK4vvvv9+qX3zxdXTteplf7j148CSrvGpVBmVlx/1yX+UdmuiDTKAl+qq/KNavX09xsS5D50sffvgh3333HQBhYeGMHftHv927S5fLaNWqMwA//XSUtWs/9tu9Vf1pog8ygfAgtkp0dAvatu0FOB4Sr1y50tZ4QlV6egYPP5zO5MlTrG3t2vUmIaGT32IQkRqt+mXL3vTbvVX9aaIPIsaYgBhD76pTp8FWefny5TZGEroKCkrIySm1ppqIiYmjdWvP55n3lkGDbgMcf8Ft27a0xgpnKrBpog8ie/fu5ciRIwBERTWmZUv3FR39TxO975WWHmPevOpJxq655gkiIhr5PY4WLdoQG1s92mb16vf8HoM6N5rog4hraz4+vo2tI26quCb677//Xl+c8oGlSz/jxIljgGNt4Msuu8u2WBISOlvlVasydObSIKGJPoi49s/Hx7exMZJqcXHJNG3aAoDi4mI2bNhgc0ShJTs7m6ysb636uHEvEB4eaVs8sbHJ1stZ+/ZtYffuLNtiUZ7TRB9Earboz7cxkmoiQlJS9UNB7b7xHmMM9913n9VqvuCCYVx44VW2xhQeHslFF11r1bX7Jjjom7FBpGaiT7QxkpqSkjqxefNawJHop0yZUscZgSc9PeNnL/7Y/cbn7NmzWbTIMdWBSBjjxv05ILrrBgy4iVWrZgGORN+v3zSbI1J10UQfRAKx6wYgKam63zZYW/QFBSUkJ0+usS0vz75peYuLi2u8HHXFFfeSlNTbtnhc9egxgpiYOEpLD3L4cD67d2+3OyRVB030QeLAgQPs378fgOjoaFq0OM/miKq1bt2OJk2acPz4cfLy8sjLyyM5OdnusE6rttZ7ZuYGAinkJ554goKCAgBiYpqTljbd5oiqhYdH0q/fOJYufQNAZ7QMAtpHHyRcW/Pdu3dHJHB+dOHh4QwZMsSqL14c2DMcVrXeXb9KSsrsDsvy/fff89JLL1n1YcOuJzq6hY0R/Vz//jdZ5S1bfqCystLGaFRdPGrRi8go4K9AOPCmMeYPbvsbAf8A+gEHgRuNMTud+3oDbwDNgUqgvzHmhLc+QEPh2j8fiLNEDhs2jIULHQthLFq0iF//+tc2R/RzFRUVrF27lhUr5vPFF19w5EgBJSVFVFZWUlb2E3/7Wx7t2vWhQ4f/oEuXS22JsbS0lIkTJ1qJc+jQofTo0b+Os/yvc+chNGuWQHFxEaWlx1ixYgWDBw+u+0RlizoTvYiEA+nAcCAfWC0ic40xG10OmwQcNsZ0FpHxwPPAjSISAfwTmGiMWSciccApr3+KBsC1Rd+jRw+cMxUHjCuvvNIqL168GGOM3x8c1tYls23bJtq1SyYraxmZmUs4duz0655mZ88nO3s+4JhLJiWlO127NuL666+nSZMmZ3Xfc32Q+8ADD5CTkwNAs2bNePvtt5kxY8FZX8fXwsLCueiia1m27O8AfPzxx5roA5gnf/8PAHKMMbnGmDLgfWC02zGjgXec5Y+AK8Xxf/kIYL0xZh2AMeagMUbfqDkHri36Cy6wf+oDd3369OG88xzPDfbv32/LeHr3Lpl27SaxevVKXn31MZYs+fiMSd5dZWUFubnZ3H777SQlJfHwww+Tn5/v0X3PdereOXPm8Prrr1v1V155JaCfdfTtO9Yqz5kzR1+eCmCeJPq2wG6Xer5zW63HGGPKgaNAHNAVMCKyQETWishDtd1ARCaLSKaIZBYVFZ3tZ2gQAr3rJiwsrEarvmpYoF0KCrJ5/vlB7Ny5ghMnqmfVbNo0noSELtx669s89NB3PPXUNp55JpdevcYwefJshg//HSkpA2pc6/Dhw/zxj3+kY8eOTJkyhd27d7vfrt7WrFnDLbfcYtXHjh3LxIkTvX4fb+rW7QqaNGkJQF5eHmvWrLE5InU6vh51EwEMAfoDx4HFIrLGGFPjaZ0xZgYwAyA1NVWbBW6OHj3Knj17AIiMjKRTp07Av+0NqhZXXnklH374IeDovvntb3/rs3udaeRMVtanvP32BE6erO7fat26KyNGPMTAgRPIyLiPwYPvqHFus2at6NfvemuBjYMH85g5czxFRTkcOXIAgFOnTvHaa6/x5ptv8p//+Z888sgjtGvXrt6fZffu3VxzzTX89NNPAHTu3Jk33ngjIMbMn0lERBS9e6fx/ff/AByt+tTUVJujUrXxpEW/B3D915zk3FbrMc5++RY4HsrmA0uNMQeMMceBeUDf+gbd0GzevNkqd+vWjYiIwBwVO2zYMKv873//m1OnfPc4prbukuLikyxY8Edef32MleRFwkhLm85jj/3IkCGTiIxs7NH14+KSSUi4iOee28uUKZ/SqdMl1r6qhN+pUyemTJnCsWOHzvlzbN++naFDh1JYWAhAy5Yt+fzzz4mLizvna/rTxRdfZ5U//vhj7b4JUJ4k+tVAFxHpICJRwHhgrtsxc4HbnOVxwBLj+IkvAHqJSBPnL4BfABtRZyXQ++erdOzYkZSUFABKSkr8urygMYZdu1YzZ87DVrKJj+9I795j+dWvfk9ERNQ5Xdfx0DGNBx9cxv/8z8Ia0z1UJfxXX32UjIwpHDp0dl06q1atYtCgQdbD14iICObMmUO3bt3OKVY79OgxgshIx0yaW7du1UXiA1Sdid7Z534vjqS9CZhtjMkWkekikuY87C0gTkRygPuBqc5zDwN/wfHLIgtYa4z5wvsfI7QFev98FRGp0U//+eef++3en3/+JHv2/GDVO3e+lEceWUlMjHdeLBMRevQYzsSJD7Jw4UIuuaS6hV9ZWcG///0ajz7aiVmz/ovdu7PO2LI9cuQIDzzwAEOGDKHqmVTjxo2ZPXs2V1xxhVfi9ZeoqGhiY6un45gyZRrTps0gPT3jDGcpf/OoD8AYMw9Ht4vrtsdcyieA693Pc+77J44hluocBUuLHuCaa67hrbfeAhx/yj/77LM+72tesOBPfP75k1a9V6+rueuuj6yWpjeJCMOHD2fYsGEsWrSIJ554wlrer6LiFEuXvs7Spa8TH59IWdk2+vbtS3JyMuXl5RQWFrJw4ULmzp3LwYMHrWvGxcXx2WefMWjQIK/H6w/Nmyezf/8OAHbt2sf48ZNtnT5C/VxgdvaqGrKzs63yhRdeaGMkdRsxYgQxMTGUlpaybds2NmzYQK9evXx2vzVrPmLOnOrBXD17jvJZkgfIzMxi2rTqJPaLX9zKyZMJHDlSxPbt31nbDxwo4M9//nOd1xs8eDAzZ86kS5cuQHBMz+AuNrY9IoIxhtzcFRQX68i5QKOJPsAVFxeTl5cHOPpwqxJCoIqOjuZXv/oVs2fPBhytel8l+h07VjFzZvUQxObN23D33XN8luQBSkoqfzb5WaNGP/Dgg5+wefMSli9/i3XrPqWs7PgZr5OcnMzzzz/PDTfcUOMvntomV/vmm7u99wF8IDIymo4dL2H79uUYU8mGDfNIDJzJVRWa6AOea7dNt27diIo6t4eK/jR27Ngaif6JJ57w+j2Kiw/zzjtpnDrlmE2jdeuutG8/iKioaK/fyxMiwgUXXMkFF1zJiRMlLF36EBdcEMfatWs5dOgQkZGRREdHM2jQIEaNGkX//v0JDw+3JVZf6N37GrZvd8xcun79ZyQmjrA5IuVKE32Ac33DtGfPnjZG4rmrrrqKxo0bc+LECTZs2MDWrVvp2rWr165fVlbGnDkzOHZsHwAxMedxzz2fM39+3V0l/tC4cVO6devDU09NrvvgEHHRRWl88slUALKzFzBsWHA9VA51gTMFoqpVMCb6pk2bMnLkSKv+8ccfe/X6DzzwAHv25AKOcfKTJ39I69aB3aUV6s4/vzutWjnWJTh5soRdu7baHJFypS36ABdMD2JdjR07lk8//RSA9957j6lTp3pl9M2sWbN4+eWXrfqYMX+ge/eh9b6uPwTiKlbeIiL06nUNixe/CMDWretsjki50hZ9gAvGFj1AWlqaNePjjz/+yLffflvHGXVbv349d955p1Xv23csI0Y8UO/r+ou3Jj8LVBddlGaVc3LW61uyAUQTfQA7dOiQ9Wp8o0aNnHPcBIcWLVrUmJTrb3/7W72ud+TIEa677jprPpjzzmvNrbe+HfDzwTQknTsPtiY5O3bsMOvWaas+UGjXTQBz7bZp0SKBxx9/26oH+thqgP/+7//mjTccy8198skn7Nq1i/bt25/1dSorK5k4cSLbtzvWJm3atCnjxv0X0dHNvRqvHdzH5QfDz/V0wsMjufDCq1i1yvFW7GeffUafPn1sjkqBtugDmmuiT0n5RcAufXc6PXv2tKZEqKys5NVXXz2n6zzzzDM1plOYOXNmQC2OXh9V4/KD6ed6Jr17X2OV5851nxJL2UVb9AHMtX8+MTFw++fdW6VQ/ZDxN7/5jbWG7N///nceffRRmjZt6vG1v/zySx5//HGr/sADDzBu3Dh++EFfsQ9EPXuOIiwsgsrKcjIzMykoKCBR356ynSb6AObaok9MDNwRN7W9LVo118mvfvUrOnTowI4dOzh06BC///3vefHFFz267pYtW5gwYYL1UO/yyy/nueee827wPlLbL79g7pbxVJMmLenS5TK2bM3pwwsAABQ4SURBVFkCOCa2mzy54bxPEKi06yaABUuL/kzCw8OZPn26Vf/rX//KypUr6zxv165dDB8+nMOHHcv/tW3blg8++CBg5+J3594lEwrdMp5yHX2j3TeBQRN9gNq/fz8HDjhWNoqMjCIuLsXegOphwoQJjBjheCXeGMOdd95JWdnpk97evXsZNmyYtWRfVFQjhg+fyF//+i+mTZvBtGkzyMz0/5q0yjOu/fSLFy/m+PEzz/ujfE8TfYByHZqWkJBIWFjw/qhEhNdff73GuPrbb7+dEydO/OzYFStW0L9/f7Zt2wZAVFQUY8fezaBBzzXI1nEwSkjoaD0sP3HihO3rBytN9AHLNdG3apVkYyTe0aFDB5566imr/t577zF06FA2bNhARUUFOTk5PProo1x22WXk5+cDjm6f999/nw4dAnexFVW7Ll16W+XPPvvMxkgUaKIPWFlZWVY5FBI9wH333cddd91l1VesWEGvXr1o1qwZXbp04ZlnnqG8vByA2NhY5s6dy5gxY+wKV9VD587Vif7zzz+nsrLSxmiUJvoA5dqib9263RmODB5hYWG89tprvPjiizXeaK1627XKgAED+OGHH7jqqqv8HaLykrZtO1oLnO/du5e1a9faHFHDpok+AJ08eZLNmzdb9Vat2toYjXeJCPfddx+LFi0iLS2NNm0cfblRUVGkpaWRkZHBsmXLSA71cYghLiwsrMYvau2+sVdwjFVrYDZu3Gh1YXTs2JFGjexZTMOXhg4dytChjlknDxw4QHR0NDExMaSnZ/DEEzNrHNsQxp+HmszMLGJiqv/dvvHGTFq16hYSM3UGI030Aci12+aiiy6yMRL/iI+Pt8rBuJSe+rmSkkquuupPzJ07k4qKU+zbt5vNm3fbHVaDpV03AaihJXoVmqKjm9O16y+sek7Oehujadg8SvQiMkpEtohIjohMrWV/IxH5wLl/pYikuO1vLyIlIhI8k4fbyHXEjSZ6FcxcX57atk0TvV3qTPQiEg6kA78EegA3iYj7wOZJwGFjTGfgReB5t/1/Ab6sf7ihzxhTo0Wv07yqYNar19VWeefOzZSWltoYTcPlSR/9ACDHGJMLICLvA6OBjS7HjAaecJY/Al4RETHGGBG5FtgB6E/YA/n5+db8Li1atAja0SdnmtFSNRwJCR1p06YHhYUbqagoZ9GiRYwePdrusBocT7pu2gKuT1HyndtqPcYYUw4cBeJEpCnwMPDkmW4gIpNFJFNEMouKijyNPSS5tuZ79+4dtCso1TapVygtm6c859p947qugPIfXz+MfQJ40Rhzxv/DjTEzjDGpxpjUhIQEH4cU2LR/XoUa90Svb8n6nyeJfg/g+mpmknNbrceISATQAjgIDAT+KCI7gfuA/xWRe+sZc0jLzMy0yn379rUxEqW8o2PH/yAmpvot2TVr1tgcUcPjSaJfDXQRkQ4iEgWMB9wnmZ4L3OYsjwOWGIdLjTEpxpgU4CXgWWPMK16KPSStXr3aKvfv39/GSJTyjrCwcHr10rdk7VRnonf2ud8LLAA2AbONMdkiMl1EqlYYeAtHn3wOcD/wsyGYqm4FBQUUFBQA0KRJE7p3725zREp5R+/e1YuRfPrppzZG0jB59GasMWYeMM9t22Mu5RPA9XVc44lziK9Bce+2CZbVlDzlPhJn27ZNdOlygdsxOt1BKOrZcyTh4RFUVJSzfv16cnNz6dixo91hNRj6ZmwACfVuG/eROHv2/NRgl9traBo3bkaHDtW/1P/1r3/ZGE3DE1pNxiDn2qIPxUSvGraoqDir/OKLr3HwYFN9t8JPtEUfIIwxId+iVw1bTEx7RBwpZ8+e7cTGXqvvVviJJvoAsXPnTg4ePAhAy5Yt6dSpk80RKeVdkZHRdOo0GHA0bNavdx+8p3xFE32AcG3Np6amBu0bsUqdycUXVy8NmZWl/fT+ook+QGj/vGoI+vS51ipv2vQVJ0/+dIajlbdoog8Q2j+vGoL4+A60a3cxAOXlZTp1sZ/oqJsAUF5eXqNFv2TJVjIzq8eb69hyFUr69bue3bt/AGDzZp0OwR+0RR8AsrKyKClxjD5o3vw8evV6WMeWq5DVr1/1u5Xbt2dz7NgxG6NpGDTRB4Bvv/3WKrdr19nGSJTyvVatOlvdNxUV5cydq6NvfE0TfQBYtmyZVdZErxoC11b9hx9+aGMkDYMmepsZY9xa9F1sjEYp/3BN9PPnz+fo0aM2RhP6NNHbbOvWrVStqhUbG0t8/Pk2R6SU77l235SVlemMlj6mid5mrq35IUOGWK+IKxXqUlNvtMqzZs2yMZLQp1nFZq6J/tJLL7UxEqX8a8CAmwHHG+CLFi2isLDQ3oBCmCZ6m7k+iB0yZIiNkSjlX+ed147k5K4AVFZWkpGRYXNEoUsTvY0KCgrIzc0FIDo6mn79+tkckVL+deGFA63yu+++a2MkoU0TvY2+/vprqzxw4ECioqJsjEYp/+vevS+NGzcGYN26dfz44482RxSaNNHbaMGCBVZ52LBhNkailD0aNYpm9OjRVl1b9b6hid4mlZWVNRL9yJEjbYxGKfvccsstVvndd9/l1KlTNkYTmjTR2yQrK4v9+/cDEB8fT9++fW2OSCl7jBw5kjZt2gCwd+9ePvvsM5sjCj0eJXoRGSUiW0QkR0Sm1rK/kYh84Ny/UkRSnNuHi8gaEfnR+d+h3g0/eM2fP98qjxw5krAw/Z2rGqbIyEh+/etfW/U33njDxmhCU53ZRUTCgXTgl0AP4CYR6eF22CTgsDGmM/Ai8Lxz+wHgGmNML+A2QDvgnFwT/ahRo2yMRCn73XnnndaqagsXLrRGoynv8KQZOQDIMcbkGmPKgPeB0W7HjAbecZY/Aq4UETHG/GCMKXBuzwaiRaSRNwIPZkePHmXFihVWfcSIETZGo5T9kpOTazR4/v73v9sYTejxJNG3BXa71POd22o9xhhTDhwF4tyOGQusNcacdL+BiEwWkUwRyaya9yWULVmyhPLycgD69etHq1atbI5IKftNnjzZKr/99tuUlek6DN7il45hEemJozvnrtr2G2NmGGNSjTGpCQkJ/gjJVl9++aVV1m4bpRyuvvpqEhMTAdi/f79OX+xFniwluAdo51JPcm6r7Zh8EYkAWgAHAUQkCfgEuNUYs73eEQe58vJyPvnkE6v+y1/+0sZolLJXZmYW06ZVL5vZuXMqBQWOhUj+9Kc/cfPNN1t99+rceZLoVwNdRKQDjoQ+HrjZ7Zi5OB62rgDGAUuMMUZEWgJfAFONMcu9F3bwWrJkCQcOHACgbdu2DBo0yOaIlLJPSUklycnVXTZxcWP57rs2lJefYt26dSxevFhfJvSCOrtunH3u9wILgE3AbGNMtohMF5E052FvAXEikgPcD1QNwbwX6Aw8JiJZzq8G3SH9wQcfWOUbbrhBh1Uq5aJp0zguumiwVX/hhRdsjCZ0eNKixxgzD5jntu0xl/IJ4PpaznsaeLqeMYaMsrIy5syZY9VvvPHGMxytVMM0YMAwfvhhqfX2+Pr16+ndu7fdYQU1jxK98o6FCxdy5MgRAFJSUli9Ooe5c9fVOCYzcwPJyXZEp1RgiI1N4LrrruOjjz4C4Nlnn+X999+3Oargpv0GfuTebVNYWEpy8uQaXyUlOqRMqYceesgqf/DBB2RlZdkYTfDTRO8npaWlNdbF1G4bpU6vf//+XHvttVb90UcftTGa4KeJ3k8yMjIoLi4GoGvXrlx88cU2R6RUYHvqqaesoZVffPEFy5frwL1zpYneD4wxvPzyy1b97rvv1rHBSp1G1dj69977jp49q1egmjp1KsYYGyMLXpro/eDbb7+1Vs5p0qQJd9xxh80RKRW4qsbWJydPZvz4WYSFOcaMLFu2jFmzZtkcXXDSRO8Hr7zyilWeOHEiLVu2tDEapYJHQkJHrrzyPqt+//33c+jQIRsjCk6a6H0sPz+/xtj5e++918ZolAo+V1/9OM2bxwJQVFTEI488YnNEwUcTvY/9+c9/pqKiAoDLL7+cCy+80OaIlAoujRs3ZcSI8VZ9xowZ/Pvf/7YxouCjid6HduzYQXp6ulX/7W9/a2M0SgWvrl37kJaWZtVvvvlmGsKU5t6iid6Hfv/731sLHV9yySVcc801NkekVPB69dVXiY+PB6CgoIDbbruNyspKm6MKDprofeSHH36oMULg+eef1yGVStVD27Zteeedd6z6l19+yfPPP3+GM1QVTfQ+UFlZyf3332/V09LSGDJkiI0RKRUarrrqKh544AGr/r//+79kZGTYGFFw0ETvAy+99BLffPMNAGFhYTz77LP2BqRUCHnmmWe49NJLrfrtt9/OV199ZWNEgU8TvZetX7++xvCvhx56iJ49e9oYkVKhJSoqik8//dT6/+rUqVOMGTOGBQsW2BxZ4NJpir2opKSECRMmWIsa9+3blyeffBKA9PQMCgpKahyvUxIr5Rn3JQcTE5syf/58Bg0aRH5+PqWlpVx99dX83//9HxMmTLAx0sCkid5LTpw4wejRo9mwYQMA0dHRzJo1i6ioKAAKCkpqLJkG8M03d/s9TqWCkfuSg3l5M0hKSmLRokWMGDGCXbt2UV5ezi233EJ2djZPPvkkkZGRNkYcWLTrxgtOnTrFDTfcwJIlS6xtL7/8Mt27d7cxKqVCX7du3Vi+fHmN7tHnnnuOyy67jNzcXBsjCyzaoq+nffv2cdNNN/H1119b25599lkmTZpkY1RKhTb3rpwRIyZRUfE2mzc7/qL+/vvv6dGjBw8++CBTp04lJibGrlADgib6evj666+ZMGEChYWF1rapU6fqXBxK+Zh7Vw5A48bRtGhxlEcffZTy8nJOnjzJ008/zVtvvcVvf/tbJk+eTIsWLWyK2F7adXMONm3axLXXXsvQoUOtJC8iTJ8+XYdSKmUTkTAefvhhvvvuO1JTU63thYWFPPTQQ7Rr144777yTpUuXNrg3arVF76GioiLmzZvHzJkzfzahUlxcHBkZGYwYMcLa5j7KRkfYKOVbrt05w4dPonXrHnz77VyOHTsCQHFxMW+++SZvvvkmrVq1Yvjw4QwbNoyBAwfSrVs3wsJCt93rUaIXkVHAX4Fw4E1jzB/c9jcC/gH0Aw4CNxpjdjr3PQJMAiqA3xhjAnawa0VFBUeOHKGgoID8/Hy2bNlCdnY2K1eutBYOcXfLLbfw3HPPkZSUVGO7+ygbHWGjlG+5d+ekpNxNz57pdO3amBdeeIHNmzdb+/bv38+sWbOsaUqaNWtG165d6dixo/WVnJxMXFwcsbGxxMbG0qJFC8LDw/3+ubyhzkQvIuFAOjAcyAdWi8hcY8xGl8MmAYeNMZ1FZDzwPHCjiPQAxgM9gURgkYh0NcZUePuDTJkyhby8PCorK62vioqKGnX3bRUVFZSUlFBcXExxcTE//fSTR/cKCwvjqquu4sknn6Rv3746Rl6pAJWVlU1ERB/GjLmPPXty2bBhJVu3rqWkpLjGccXFxaxZs4Y1a9ac9loiQpMmTWjUqJH1FRUVZZUjIyMJCwtDRH72Vdt2921Vxo0bx+233+7V74MnLfoBQI4xJtf5Yd8HRgOuiX408ISz/BHwijgiHw28b4w5CewQkRzn9VZ4J/xq33zzDZs2bfL2ZS0REREMGDCAtLQ0Jk6cSGJiorVPx8grFZhcW/kpKTB4MHz00X+RlHQeO3ZsJD9/OwUFOzl+vPjMF8Kx9nNpaSmlpaU+jdkXa1ZIXYvtisg4YJQx5j+d9YnAQGPMvS7HbHAek++sbwcG4kj+3xtj/unc/hbwpTHmI7d7TAaqMmU3YEv9P9ppxQMHfHj9YKHfB/0eVNHvQ2h8D5KNMQm17QiIh7HGmBnAjDoP9AIRyTTGpNZ9ZGjT74N+D6ro9yH0vweePGbeA7RzqSc5t9V6jIhEAC1wPJT15FyllFI+5EmiXw10EZEOIhKF4+HqXLdj5gK3OcvjgCXG0Sc0FxgvIo1EpAPQBVjlndCVUkp5os6uG2NMuYjcCyzAMbzybWNMtohMBzKNMXOBt4B3nQ9bD+H4ZYDzuNk4HtyWA/f4YsTNWfJLF1EQ0O+Dfg+q6PchxL8HdT6MVUopFdxC91UwpZRSgCZ6pZQKeQ0m0YvI9SKSLSKVIpLqtu8REckRkS0iMtKuGP1JRJ4QkT0ikuX8usrumPxJREY5f945IjLV7njsICI7ReRH588/0+54/EVE3haR/c73f6q2nSciX4nINud/Y+2M0dsaTKIHNgDXAUtdN7pN0zAKeNU57UND8KIxpo/za57dwfiLy7QevwR6ADc5/x00RFc4f/4hO4a8Fv+H4/91V1OBxcaYLsBiZz1kNJhEb4zZZIyp7Y1ba5oGY8wOoGqaBhW6rGk9jDFlQNW0HqoBMMYsxTE60NVo4B1n+R3gWr8G5WMNJtGfQVtgt0s937mtIbhXRNY7/5QNqT9V69CQf+auDLBQRNY4pyFpyFobY6pWENoLtLYzGG8LiCkQvEVEFgHn17JrmjHmU3/HY7czfT+A14CncPzP/hTwZ+DX/otOBYAhxpg9ItIK+EpENjtbuw2aMcaISEiNOw+pRG+MGXYOp4XsNA2efj9E5O/A5z4OJ5CE7M/8bBhj9jj/u19EPsHRpdVQE/0+EWljjCkUkTbAfrsD8ibtummg0zQ4/zFXGYPjYXVD4cm0HiFNRGJEpFlVGRhBw/o34M51GpfbgJDqAQipFv2ZiMgY4GUgAfhCRLKMMSMDdJoGf/ijiPTB0XWzE7jL3nD853TTetgclr+1Bj5xLngRAWQYY+bbG5J/iMh7wOVAvIjkA48DfwBmi8gkIA+4wb4IvU+nQFBKqRCnXTdKKRXiNNErpVSI00SvlFIhThO9UkqFOE30SikV4jTRK6VUiNNEr5RSIe7/AaZ4P74fPNrKAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "sns.distplot(data,bins=50,hist_kws={'color':'blue','edgecolor':'k'},kde_kws={'lw':3,'color':'k'})\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [],
   "source": [
    "data = gen_GMM(N=10000,mu=[-5,0,5],sigma=[1.8,0.3,1.1],mult=[0.7,1.8,1.1])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "sns.distplot(data,bins=50,hist_kws={'color':'blue','edgecolor':'k'},kde_kws={'lw':3,'color':'k'})\n",
    "plt.show()"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.8"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
